Als ersten Schritt in der Reconnaissance-Phase nutzen wir ARP-Scan, um aktive Hosts im Netzwerk zu identifizieren. Dies hilft uns, das Zielsystem schnell zu lokalisieren.
Hier sehen wir die MAC-Adresse und den Hersteller des Netzwerkadapters. Dies kann uns weitere Hinweise auf das Betriebssystem oder die Art des Geräts geben.
Um die Hostnamen aufzulösen, fügen wir den gefundenen Host in die /etc/hosts
-Datei ein. Dies erleichtert die weitere Arbeit mit dem Zielsystem, da wir den Hostnamen anstelle der IP-Adresse verwenden können.
Ein Eintrag in der /etc/hosts
Datei erleichtert die Identifizierung des Systems.
Nmap wird verwendet, um die offenen Ports und Dienste des Zielsystems zu scannen. Der -sV
Parameter aktiviert die Service-Version Erkennung, -A
aktiviert aggressive Scans (Scripting, Version Detection, Traceroute) und --script vuln
führt bekannte Schwachstellen-Scripte aus. -T5
Beschleunigt den scan durch die verbindung zu beschleunigen.
Die Nmap-Ergebnisse zeigen, dass SSH (Port 22) und HTTP (Port 80) geöffnet sind. Die Ausgabe des vulners
-Skripts deutet auf potenzielle Schwachstellen in OpenSSH und Apache hin. Die Ergebnisse sollten weiter untersucht werden.
Hier wird der IPv6-Adressebereich getestet.
Dieser Befehl führt einen umfassenden Nmap-Scan durch, um alle offenen Ports und zugehörigen Dienste auf dem Zielsystem zu identifizieren. Die Option -sS
führt einen SYN-Scan durch, -sC
verwendet Standard-Nmap-Skripte zur Erkennung von Diensten und Schwachstellen, -sV
aktiviert die Versionserkennung und -A
aktiviert aggressive Scan-Optionen. Die Option -p-
scannt alle 65535 Ports, $IP
ist eine Variable, die die Ziel-IP-Adresse enthält, -Pn
überspringt die Host-Discovery-Phase und --min-rate 5000
erhöht die Scan-Geschwindigkeit. Die Ausgabe wird dann mit grep open
gefiltert, um nur die offenen Ports anzuzeigen.
Die vollständige Nmap-Ausgabe zeigt, dass SSH (Port 22) und HTTP (Port 80) geöffnet sind. Es werden auch die SSH-Hostschlüssel und der HTTP-Server-Header angezeigt.
Nikto wird verwendet, um Webserver auf potenzielle Schwachstellen und Konfigurationsfehler zu scannen.
Nikto findet verschiedene interessante Punkte: Das Fehlen von Clickjacking- und Content-Type-ption-Headern, die Möglichkeit, Inodes über ETags preiszugeben, eine veraltete Apache-Version und das Vorhandensein der Apache-Standarddatei /icons/README
.
Gobuster wird verwendet, um versteckte Verzeichnisse und Dateien auf dem Webserver zu finden. Der Befehl verwendet eine Wortliste (directory-list-2.3-medium.txt
), um verschiedene Pfade zu bruteforcen. Die Parameter -x
und -e
werden verwendet, um nach bestimmten Dateiendungen zu suchen, und -b
wird verwendet, um bestimmte HTTP-Statuscodes zu ignorieren.
Gobuster findet die Dateien index.html
, robots.txt
und logs.php
.
Die Datei robots.txt
wird auf interessante Informationen überprüft.
Die robots.txt
-Datei enthält den Hinweis "super secret password - bG9sIHRyeSBoYXJkZXIgYnJvCg". Dies sieht nach einem Base64-kodierten String aus.
Der Base64-kodierte String wird dekodiert.
Der dekodierte String lautet "lol try harder bro". Dies ist wahrscheinlich kein nützliches Passwort, sondern eher ein Hinweis.
Der Quellcode der index.html
-Datei wird angezeigt.
Die index.html
-Datei enthält grundlegende Informationen über das CTF.
Der Quellcode der logs.php
-Datei wird angezeigt.
Die logs.php
-Datei enthält Kernel-Protokolle, die möglicherweise Informationen über das System preisgeben. Hier sind aber keine offensichtlichen Schwachstellen zu erkennen.
Metasploit wird verwendet, um SSH-Benutzer zu enumerieren.
Der SSH-Benutzer-Enumerationsversuch mit Metasploit schlägt fehl, da das Zielsystem falsche positive Ergebnisse liefert.
Die Datei view-source:http://192.168.2.125/
wird angezeigt.
Hier wurde im Quellcode ein base64 String gefunden.
Hier wird der base64 String dekodiert.
Nochmals wird der base64 String dekodiert.
Ein letztes mal wird der base64 String dekodiert.
Die Datei workinginprogress.php wird aufgerufen.
Die Seite zeigt, dass sich eine Seite im Aufbau befindet.
Wir haben eine RCE Schwachstelle gefunden, nun machen wir einen Proof of Concept.
Es wird versucht, den Parameter "FUZZ" in der URL http://192.168.2.125/workinginprogress.php
zu fuzzern, um potenzielle Parameter zu entdecken.
Der Fuzzing-Prozess entdeckt den Parameter cmd
, der möglicherweise für Remote Code Execution (RCE) anfällig ist.
Wir haben unser Ziel erreicht.
Es wird versucht, den Befehl id
über den cmd
-Parameter auszuführen, um die Identität des Webservers zu ermitteln.
Die Ausgabe zeigt, dass der Webserver als Benutzer www-data
ausgeführt wird.
Es wird versucht, die Datei /etc/passwd
über den cmd
-Parameter auszulesen und nach Benutzern mit der Shell /bin/bash
zu suchen.
Die Ausgabe zeigt die Benutzer root
und cuong
, die die Shell /bin/bash
verwenden.
Es wird versucht, den Inhalt des Verzeichnisses /home
über den cmd
-Parameter aufzulisten.
Die Ausgabe zeigt, dass das Verzeichnis /home
das Unterverzeichnis cuong
enthält.
Es wird versucht, den Inhalt des Verzeichnisses /home/cuong/.ssh
über den cmd
-Parameter aufzulisten.
Es liegt eine RCE Schwachstelle vor.
Hier wird versucht eine Reverse Shell zu öffnen.
Der Attacker hört nun auf Port 9001.
Nun wird die Reverse Shell gestartet.
Nun hat der Attacker eine erfolgreiche Reverse Shell.
Wir haben erfolgreich eine Reverse Shell erhalten. Das Ziel ist erreicht!
Hier wird versucht die Rechte zu erweitern, um das System zu kompromittieren.
Der aktuelle Benutzer wird ermittelt.
Der aktuelle Benutzer ist www-data
.
Es wird versucht, die Datei /etc/passwd
auszulesen.
Die Datei /etc/passwd
kann gelesen werden.
Es wird versucht, die Capabilities des Systems aufzulisten.
Das Programm /usr/bin/ping
hat die Capability cap_net_raw+ep
.
Es wird versucht, in das Home-Verzeichnis des Benutzers cuong
zu wechseln.
Das Home-Verzeichnis des Benutzers cuong
wird aufgerufen.
Es wird versucht, den Inhalt des Verzeichnisses /home/cuong
aufzulisten.
Das Verzeichnis /home/cuong
enthält die Standard-Bash-Dateien.
Es wird versucht, die .bash_history
-Datei des Benutzers cuong
auszulesen.
Der Benutzer www-data
hat keine Berechtigung, die .bash_history
-Datei des Benutzers cuong
auszulesen.
In diesem Abschnitt konzentrieren wir uns auf die Eskalation von Privilegien, um Root-Zugriff auf das System zu erhalten.
Wir suchen nach Dateien mit gesetztem SUID-Bit, die von jedem Benutzer ausgeführt werden können.
Die Ausgabe zeigt mehrere SUID-Binärdateien, die möglicherweise für die Rechteausweitung missbraucht werden können.
Wir verwenden die Binärdatei find
, um eine Shell mit Root-Rechten zu starten.
Wir sind jetzt als root
angemeldet.
Die Ausgabe bestätigt, dass wir Root-Rechte haben.
Hier wird die Root Flag aufgerufen.
Die Datei root.txt
enthält die Root-Flag.